Apache Commons IO লাইব্রেরি মূলত ফাইল ম্যানিপুলেশন এবং স্ট্রিম ম্যানিপুলেশনের জন্য ডিজাইন করা হয়েছে। তবে, এর কিছু ইউটিলিটি ক্লাস ব্যবহার করে আপনি ডেটা সেরিয়ালাইজেশন (Data Serialization) এবং ডেসেরিয়ালাইজেশনও পরিচালনা করতে পারেন। Serialization হল একটি প্রক্রিয়া যার মাধ্যমে একটি অবজেক্টকে একটি বাইনারি ফর্ম্যাটে রূপান্তর করা হয়, যাতে তা স্টোর করা যায় বা নেটওয়ার্কের মাধ্যমে প্রেরণ করা যায়। একে ডেসিরিয়ালাইজেশন বলে উল্টোভাবে অবজেক্টে রূপান্তর করা হয়।
এখানে আমরা দেখব কীভাবে Apache Commons IO লাইব্রেরি ব্যবহার করে ফাইল বা স্ট্রিমে ডেটা সেরিয়ালাইজ এবং ডেসেরিয়ালাইজ করা যায়।
Java এর স্ট্যান্ডার্ড Serialization প্রক্রিয়ায় একটি অবজেক্টকে একটি byte stream এ রূপান্তর করা হয়, যা পরে একটি ফাইলে বা স্ট্রিমে সংরক্ষিত হতে পারে। এটি পরে পুনরায় অবজেক্টে রূপান্তর (ডেসেরিয়ালাইজেশন) করা যায়।
আপনি ObjectOutputStream এবং ObjectInputStream ব্যবহার করে অবজেক্ট সেরিয়ালাইজ এবং ডেসেরিয়ালাইজ করতে পারেন। তবে Apache Commons IO লাইব্রেরি স্ট্রিম ম্যানিপুলেশন এবং সেরিয়ালাইজেশনের জন্য কিছু অতিরিক্ত ইউটিলিটি সরবরাহ করে, যা সহজে অবজেক্ট কপি করতে সহায়তা করে।
ধরা যাক, আমরা একটি ক্লাস Person সেরিয়ালাইজ করতে চাই এবং এটি একটি ফাইলে সংরক্ষণ করব।
import java.io.Serializable;
public class Person implements Serializable {
private static final long serialVersionUID = 1L; // সিরিয়ালাইজেশন ভার্সন আইডি
private String name;
private int age;
// কনস্ট্রাক্টর
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// গেটার এবং সেটার
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
import org.apache.commons.io.FileUtils;
import java.io.*;
public class SerializeExample {
public static void main(String[] args) {
Person person = new Person("John Doe", 30);
try (ObjectOutputStream objectOut = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
// Person অবজেক্ট সেরিয়ালাইজ করা
objectOut.writeObject(person);
System.out.println("Person অবজেক্ট ফাইলে সেরিয়ালাইজ করা হয়েছে।");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ObjectOutputStream
: এই ক্লাসটি অবজেক্টকে সেরিয়ালাইজ করে ফাইলে বা স্ট্রিমে লেখার জন্য ব্যবহৃত হয়।person.ser
: এটি ফাইল যা অবজেক্টটি সেরিয়ালাইজ করার পরে সংরক্ষিত হবে।Person অবজেক্ট ফাইলে সেরিয়ালাইজ করা হয়েছে।
ফাইল থেকে সেরিয়ালাইজ করা অবজেক্ট পুনরায় ডেসেরিয়ালাইজ করা যেতে পারে। এটি ObjectInputStream ব্যবহার করে করা হয়।
import java.io.*;
public class DeserializeExample {
public static void main(String[] args) {
try (ObjectInputStream objectIn = new ObjectInputStream(new FileInputStream("person.ser"))) {
// ফাইল থেকে অবজেক্ট ডেসেরিয়ালাইজ করা
Person person = (Person) objectIn.readObject();
System.out.println("ডেসেরিয়ালাইজ করা অবজেক্ট: " + person);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
ObjectInputStream
: এটি ফাইল বা স্ট্রিম থেকে সেরিয়ালাইজড অবজেক্ট ডেসেরিয়ালাইজ করতে ব্যবহৃত হয়।person.ser
: এখানে আমরা পূর্বে সেরিয়ালাইজ করা person.ser
ফাইলটি ডেসেরিয়ালাইজ করছি।ডেসেরিয়ালাইজ করা অবজেক্ট: Person [name=John Doe, age=30]
Apache Commons IO এর FileUtils.copyFile()
মেথডটি সেরিয়ালাইজড ফাইল কপি করার জন্য ব্যবহার করা যেতে পারে, যদি আপনি একটি ফাইলের মধ্যে সেরিয়ালাইজড অবজেক্ট রাখতে চান এবং সেই ফাইলটিকে অন্য জায়গায় কপি করতে চান।
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
public class FileCopySerializationExample {
public static void main(String[] args) {
File sourceFile = new File("person.ser");
File destinationFile = new File("person_copy.ser");
try {
// সেরিয়ালাইজড ফাইল কপি করা
FileUtils.copyFile(sourceFile, destinationFile);
System.out.println("ফাইল কপি করা হয়েছে: " + destinationFile.getName());
} catch (IOException e) {
e.printStackTrace();
}
}
}
FileUtils.copyFile()
: এটি একটি ফাইল থেকে অন্য ফাইলে ডেটা কপি করে, যেমন সেরিয়ালাইজড অবজেক্ট কপি করা।ফাইল কপি করা হয়েছে: person_copy.ser
বড় অবজেক্টের ক্ষেত্রে, আপনি BufferedInputStream এবং BufferedOutputStream ব্যবহার করে আরও কার্যকরভাবে সেরিয়ালাইজ এবং ডেসেরিয়ালাইজ করতে পারেন। এটি স্ট্রিমের পারফরম্যান্স উন্নত করে।
import java.io.*;
public class BufferedStreamSerializationExample {
public static void main(String[] args) {
Person person = new Person("Alice", 25);
try (BufferedOutputStream bufferedOut = new BufferedOutputStream(new FileOutputStream("personBuffered.ser"));
ObjectOutputStream objectOut = new ObjectOutputStream(bufferedOut)) {
// সেরিয়ালাইজড অবজেক্ট লেখার জন্য BufferedOutputStream ব্যবহার করা
objectOut.writeObject(person);
System.out.println("Buffered Stream দিয়ে সেরিয়ালাইজ করা হয়েছে!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
Buffered Stream দিয়ে সেরিয়ালাইজ করা হয়েছে!
Apache Commons IO লাইব্রেরি serialization এবং deserialization এর জন্য অত্যন্ত কার্যকরী সরঞ্জাম সরবরাহ করে। আপনি ObjectOutputStream এবং ObjectInputStream এর মাধ্যমে Java অবজেক্ট সেরিয়ালাইজ এবং ডেসেরিয়ালাইজ করতে পারেন, আর Apache Commons IO এর FileUtils ক্লাস ব্যবহার করে আপনি সেরিয়ালাইজড ফাইলের কপি এবং মুভমেন্ট করতে পারেন। ফাইল এবং স্ট্রিমের কার্যকর ব্যবস্থাপনা এবং পারফরম্যান্স অপটিমাইজেশনের জন্য Buffered Streams ব্যবহার করা যেতে পারে। Apache Commons IO লাইব্রেরি ডেটা সেরিয়ালাইজেশনকে দ্রুত এবং সহজ করে তোলে।
common.read_more